package gui;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import environment.Casilla;
import environment.Tablero;

public class TableroGUI extends javax.swing.JPanel {
	
	public static final int CARGADOR=1;
	public static final int ENTREGAAZUL=2;
	public static final int ENTREGAROJO=3;
	public static final int ENTREGAVERDE=4;
	public static final int ENTREGAAMARILLO=5;
	public static final int PAQUETEAZUL=6;
	public static final int PAQUETEROJO=7;
	public static final int PAQUETEVERDE=8;
	public static final int PAQUETEAMARILLO=9;
	public static final int AGENTE=10;
	public static final int AGENTECARGADOR=11;

	private ImageIcon cargador, entregaAzul, entregaRojo, entregaVerde, entregaAmarillo;
	private ImageIcon paqueteAzul, paqueteRojo, paqueteVerde, paqueteAmarillo;
	private ImageIcon agente, agenteCargador, none;
	private ImageIcon agenteAzul, agenteRojo, agenteVerde, agenteAmarillo;
	private Tablero t;
	private CasillasGUI [][] casillas;

	public TableroGUI() {
		initComponents();
	}

	public TableroGUI(Tablero t) {
		this.t = t;
		initComponents();
		int x,y;
		setLayout(new java.awt.GridLayout(t.getDim(), t.getDim()));
		cargarImagenes();
		casillas = new CasillasGUI[t.getDim()][t.getDim()];
		for (int i = 0; i < t.getDim(); i++){
			for (int j = 0; j < t.getDim(); j++){
				casillas[i][j] = new CasillasGUI(this, t.getCasillas()[i][j]);
				//t.getCasillas()[i][j].setGuiElement(casillas[i][j]);
				//t.getCasillas()[i][j].setContenido(t.getCasillas()[i][j].getContenido());
				t.getCasillas()[i][j].updateGui();
				x = (i * 35) + 1;
				y = (j * 35) + 1;
				casillas[i][j].setBounds(x, y, 34, 34);
				this.add(casillas[i][j]);
			}
		}
		
	}

	public void pintar(int x, int y, int what){
		switch (what) {
		case 0:
			this.casillas[x][y].setFondo(none);
			break;
		case 1:
			this.casillas[x][y].setFondo(cargador);
			break;
		case 2:
			this.casillas[x][y].setFondo(entregaAzul);
			break;
		case 3:
			this.casillas[x][y].setFondo(entregaRojo);
			break;
		case 4:
			this.casillas[x][y].setFondo(entregaVerde);
			break;
		case 5:
			this.casillas[x][y].setFondo(entregaAmarillo);
			break;
		case 6:
			this.casillas[x][y].setFondo(paqueteAzul);
			break;
		case 7:
			this.casillas[x][y].setFondo(paqueteRojo);
			break;
		case 8:
			this.casillas[x][y].setFondo(paqueteVerde);
			break;
		case 9:
			this.casillas[x][y].setFondo(paqueteAmarillo);
			break;
		case 10:
			this.casillas[x][y].setFondo(agente);
			break;
		case 11:
			this.casillas[x][y].setFondo(agenteCargador);
			break;
		case 16:
			this.casillas[x][y].setFondo(agenteAzul);
			break;
		case 17:
			this.casillas[x][y].setFondo(agenteRojo);
			break;
		case 18:
			this.casillas[x][y].setFondo(agenteVerde);
			break;
		case 19:
			this.casillas[x][y].setFondo(agenteAmarillo);
			break;
		}
		this.repaint();
	}

	private void cargarImagenes() {
		this.none = this.cargarFondo("res/none.png");
		this.cargador = this.cargarFondo("res/loader.png");
		this.entregaAzul = this.cargarFondo("res/cB.png");
		this.entregaRojo = this.cargarFondo("res/cR.png");
		this.entregaVerde = this.cargarFondo("res/cG.png");
		this.entregaAmarillo = this.cargarFondo("res/cY.png");
		this.paqueteAzul = this.cargarFondo("res/pB.png");
		this.paqueteRojo = this.cargarFondo("res/pR.png");
		this.paqueteVerde = this.cargarFondo("res/pG.png");
		this.paqueteAmarillo = this.cargarFondo("res/pY.png");
		this.agente = this.cargarFondo("res/agent.png");
		this.agenteCargador = this.cargarFondo("res/agentloader.png");
		this.agenteAzul = this.cargarFondo("res/agentpB.png");
		this.agenteRojo = this.cargarFondo("res/agentpR.png");
		this.agenteVerde = this.cargarFondo("res/agentpG.png");
		this.agenteAmarillo = this.cargarFondo("res/agentpY.png");
	}

	protected static ImageIcon cargarFondo(String ruta) {
	java.net.URL localizacion = TableroGUI.class.getResource(ruta);
		if (localizacion != null) {
			//System.err.println("Archivo encontrado: " + ruta);
			//System.err.println("Archivo encontrado: " + localizacion);
			return new ImageIcon(localizacion);
		} else {
			System.err.println("No se ha encontrado el archivo: " + ruta);
			return null;
		}
	}
	
	public int[] getCoordenadas(Casilla casilla) {
		int[] coordenadas;
		coordenadas = t.getCoordenadas(casilla);
		return coordenadas;
	}
	
	public CasillasGUI[][] getCasillas() {
		return casillas;
	}
	
	public void setCasillas(CasillasGUI[][] casillas) {
		this.casillas = casillas;
	}
	
	private void initComponents() {
		setLayout(null);
		setBackground(new java.awt.Color(0, 0, 0));
		setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
		setPreferredSize(new java.awt.Dimension(t.getDim()*35+1, t.getDim()*35+1));
	}
}